/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao.implementacoes;

import dao.Conexao;
import dao.ImobiliariaDaoException;
import dao.ProprietarioDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Proprietario;

/**
 *
 * @author cristiane
 */
public class ProprietarioDaoImpl implements ProprietarioDao{

    private Connection conn;

    public ProprietarioDaoImpl() throws ImobiliariaDaoException{
        try{
            this.conn = Conexao.getConnection();
        }catch(Exception e){
            throw new ImobiliariaDaoException("Erro: " + e.getMessage());
        }
    }

    public void salvarProprietario(Proprietario prop) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(prop == null)
            throw new ImobiliariaDaoException("Nenhum proprietario foi informado!");
        try{
            String sql = "INSERT INTO proprietario values (?, ?, ?, ?, ?, ?)";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, prop.getNome());
            ps.setString(2, prop.getCpf());
            ps.setString(3, prop.getRg());
            ps.setString(4, prop.getEmail());
            ps.setString(5, prop.getTelefone1());
            ps.setString(6, prop.getTelefone2());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao salvar novo proprietario " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }

    }

    public void atualizarProprietario(Proprietario prop) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(prop == null)
            throw new ImobiliariaDaoException("Nenhum proprietário foi informado!");
        try{
            String sql = "UPDATE proprietario SET nome=?, rg=?, email=?, telefone1=?, " +
                    "telefone2=? WHERE cpf=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, prop.getNome());
            ps.setString(2, prop.getRg());
            ps.setString(3, prop.getEmail());
            ps.setString(4, prop.getTelefone1());
            ps.setString(5, prop.getTelefone2());
            ps.setString(7, prop.getCpf());

            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao atualizar proprietário " + e);
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public void excluirProprietario(Proprietario prop) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(prop == null)
            throw new ImobiliariaDaoException("Nenhum proprietario foi informado!");
        try{
            String sql = "DELETE FROM proprietario WHERE cpf=?";
            conn1 = conn;
            conn1.prepareStatement(sql);
            ps.setString(1, prop.getCpf());
            ps.executeUpdate();
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao deletar proprietário!");
        }finally{
            Conexao.closeConnection(conn1, ps);
        }
    }

    public Proprietario procurarProprietario(String cpf) throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        if(cpf == null)
            throw new ImobiliariaDaoException("Nenhum CPF foi informado!");
        try{
            String sql = "SELECT * FROM proprietario WHERE cpf=?";
            conn1 = conn;
            conn1.prepareStatement(sql);
            ps.setString(1, cpf);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Nenhum proprietario encontrado com o CPF " + cpf);
            String nome=rs.getString("nome");
            String cpf1 = rs.getString("cpf");
            String rg = rs.getString("rg");
            String email = rs.getString("email");
            String telefone1 = rs.getString("telefone1");
            String telefone2 = rs.getString("telefone2");

            Proprietario prop = new Proprietario(nome, cpf, rg, email, telefone1, telefone2);
            return prop;


        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao procurar cliente " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public List todosProprietarios() throws ImobiliariaDaoException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection conn1 = null;
        try{
            String sql = "SELECT * FROM proprietarios";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            if(!rs.next())
                throw new ImobiliariaDaoException("Erro ao listar proprietarios ");
            List<Proprietario> listaProprietario = new ArrayList<Proprietario>();
            while(rs.next()){
                String nome = rs.getString("nome");
                String cpf = rs.getString("cpf");
                String rg = rs.getString("rg");
                String email = rs.getString("email");
                String telefone1 = rs.getString("telefone1");
                String telefone2 = rs.getString("telefone2");
                listaProprietario.add(new Proprietario(nome, cpf, rg, email, telefone1, telefone2));
            }
            return listaProprietario;
        }catch(SQLException e){
            throw new ImobiliariaDaoException("Erro ao listar proprietarios " + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

}
